//1、声明专门的函数用来在 分配Auth的模态框中显示树形结构
function fillAuthTree() {
	//debugger;
	//1、发送Ajax请求，查询Auth数据
	var ajaxReturn = $.ajax({
		"url":"assgin/get/all/auth.json",
		"type":"post",
		"dataType":"json",
		"async":false
	});
	if (ajaxReturn.status !=200){
		//上面的ajax的响应状态码不是200，后面的代码就不用执行了在结束执行前给出如下提示
		layer.msg("请求处理出错，响应状态码是："+ajaxReturn.status+" 说明是："+ajaxReturn.statusText);
		return;
	}
	//1、发送Ajax请求，查询Auth数据，在最上面
	//2、响应结果中获取Auth的json数据
	//从服务端查询到list不需要组装成树形结构，这里我们交给zTree去做
	var authList =ajaxReturn.responseJSON.data;

	if ( authList == null){
		alert("没有获取到数据");
		return;
	}
	//3、准备对zTree进行设置的json对象
	var setting = {
		data: {
			simpleData: {
				//开启简单json功能
				"enable": true,
				//使用
				"pIdKey":"categoryId"
			},
			"key":{
				//使用title属性显示节点名称，不用默认的name作为属性名
				"name":"title"
			}
		},
		"check":{
			"enable":true
		}
	};
	//4、生成树形结构
	// <ul id="authTreeDemo" class="ztree"></ul>
	$.fn.zTree.init($("#authTreeDemo"),setting,authList);

	//获取 ZTreeObj 对象
	var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
	//调用 ZTreeObj 对象的方法  ，把 节点展开
	zTreeObj.expandAll(true);
	// 5、查询已经分配的 Auth 的id 组成的数组
	ajaxReturn = $.ajax({
		"url":"assign/get/assigned/auth/id/by/role/id.json",
		"type":"post",
		"data":{
			"roleId":window.roleId
		},
		"dataType":"json",
		"async":false
	});
	//debugger;
	if (ajaxReturn.status !=200){
		//上面的ajax的响应状态码不是200，后面的代码就不用执行了在结束执行前给出如下提示
		layer.msg("请求处理出错，响应状态码是："+ajaxReturn.status+" 说明是："+ajaxReturn.statusText);
		return;
	}
	// 从响应 结果 中获取 authIdArray
	var authIdArray = ajaxReturn.responseJSON.data;
	//alert(authIdArray);

	//6、根据authIdArray 把 树形结构中对应的节点勾选
	for (var i = 0; i<authIdArray.length;i++){

		var authId=authIdArray[i];

		//1、根据id查询树形结构中对应的节点
		var treeNode=zTreeObj.getNodeByParam("id",authId);
		//2、将treeNode设置为被勾选
		//checked设置为true表示该节点勾选
		var checked=true;
		//checkTypeFlag设置为false 表示“不联动”，不联动是为了避免把不该勾选的勾选上
		var checkTypeFlag=false;
		//执行
		zTreeObj.checkNode(treeNode,checked,checkTypeFlag);
	}

}
//执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
//获取我们设置的全局变量
function generatePage(){
	
	//1、获取分页数据
	var pageInfo=getPageInfoRemote();

	//2、填充表格
	fillTableBody(pageInfo);
}

//远程访问服务器端 获取pageInfo数据
function getPageInfoRemote() {
	
	var pageInfo=null;
	
	var ajsxResult= $.ajax({
		"url":"role/get/page/info.json",
		"type":"post",
		"data":{
			"pageNum":window.pageNum,
			"pageSize":window.pageSize,
			"keyword":window.keyword
		},
		"async":false,		/*改成同步，因为只有成功获取到了数据才能填充表格，异步的话有还没有获取到数据的时候就填充了表格了的风险*/
		"dataType":"json"
	});
	console.log(ajsxResult);
	var statusCode=ajsxResult.status;
	//如果响应状态码不是200
	if(statusCode!=200){
		layer.msg("服务端程序调用失败，响应状态码是"+statusCode+"说明信息是"+ajsxResult.statusText);
		return null;
	}
	//console.log("测试一下如果return后面还会不会执行");//答案是不管前面return了什么后面都不会执行了
	
	//如果响应状态码是200就往下走，说明请求处理是成功的，，获取pageInfo
	var resultEntity=ajsxResult.responseJSON;
	
	//从resultEntity中获取result属性
	var result=resultEntity.result;
	
	//判断result是否成功
	if(result=="FAILED"){
		layer.msg(resultEntity.message);
		return null;
	}
	//两方面都排除了，再往下就一定是成功了
	//[代码逻辑]前面都没有问题了，才会执行下面的代码
	var pageInfo=resultEntity.data;
	//返回pageInfo
	return pageInfo;	//这个pageInfo里面当前页码什么的也都有，可在前端一探究竟
}
//填充表格
function fillTableBody(pageInfo) {
	//在最前面先清楚旧数据，否则 由于是异步无刷新的方式，数据会一直叠加一直叠加…………
	$("#rolePageBody").empty();
	
	//判断pageInfo对象是否有效
	if(pageInfo==null || pageInfo==undefined || pageInfo.list==null || pageInfo.list.length==0){
		
		//没数据或者是空数据，反正就是各种可能有的问题
		//这里可以直接在表格把消息填充显示出来了
		$("#rolePageBody").append("<tr><td colspan='5'>抱歉！没有查询到您要搜索的数据！</td></tr>");
		
		//移除导航页码
		/*
		 * remove()删除选择的元素和子元素
		  empty()只删除选中元素的子元素
		  */
		$("#Pagination").remove();
		
		return;
	}
	//没有进上面的if里面，也就是没有问题了再继续往下走
	
	/*  使用pageInfo的list属性填充tbody */
	for(var i=0; i < pageInfo.list.length;i++){
		
		var role=pageInfo.list[i];
		
		/*debugger;*/
		
		var roleId=role.id;
		var roleName=role.name;
		var roleCreatetime=role.createtime;
		
		/* 每列的数据 */
		var numberTd="<td>"+(i+1)+"</td>";		//第1个<td>
		var checkboxTd="<td><input id='"+roleId+"' class='itemBox' type='checkbox'></td>";//第2个<td>
		var roleNameTd="<td>"+roleName+"</td>";	//第3个<td>
		var createDateTime="<td>"+roleCreatetime+"</td>";//第4个<td>
		
		var checkBtn ="<button id='"+roleId+"' type='button' class='btn btn-success btn-xs checkBtn'><i class='glyphicon glyphicon-check'></i></button>";
		var pencilBtn="<button id='"+roleId+"' type='button' class='btn btn-primary btn-xs pencilBtn'><i class='glyphicon glyphicon-pencil'></i></button>";
		var removeBtn="<button id='"+roleId+"' type='button' class='btn btn-danger btn-xs removeBtn'><i class='glyphicon glyphicon-remove'></i></button>";
		
		var buttonTd="<td>"+checkBtn+"&nbsp;"+pencilBtn+" "+removeBtn+"</td>";//第5个<td>
		
		var tr="<tr>"+numberTd+checkboxTd+roleNameTd+createDateTime+buttonTd+"</tr>"
		
		$("#rolePageBody").append(tr);
		
	}
	/*console.log("开始填充导航页码了…………");*/
	//数据填充完了，再加载分页页码导航条
	generateNavigator(pageInfo);
}
	
//生成分页 页码导航
function generateNavigator(pageInfo) {
	
	//获取总记录数
	var totalRecord=pageInfo.total;
	
	//声明相关属性（Pagination要设置的属性）
	var properties = {
		num_edge_entries: 3,						// 边缘页数
		num_display_entries: 5,						// 主体页数
		callback: paginationCallBack,				// 指定用户点击“翻页”的按钮时跳转页面的回调函数
		items_per_page: pageInfo.pageSize,			// 每页要显示的数据的数量
		current_page: pageInfo.pageNum - 1,			// Pagination内部使用pageIndex来管理页码，pageIndex从0开始，pageNum从1开始，所以要减一
		prev_text: "上一页",							// 上一页按钮上显示的文本
		next_text: "下一页"							// 下一页按钮上显示的文本
	};
	
	// 生成页码导航条
	$("#Pagination").pagination(totalRecord, properties);
	
}
//翻页时的回调函数（可参考admin-page.jsp的 pageSelectCallback方法 ）
function paginationCallBack(pageIndex, jQuery) {
	
	// 根据pageIndex计算得到pageNum
	window.pageNum = pageIndex + 1;
	
	//调用分页函数
	generatePage();
	
	//异步不需要 跳转页面
	
	// 由于每一个页码按钮都是超链接，所以在这个函数最后取消超链接的默认行为
	return false;
}
//声明专门的函数用于显示确认模态框
function showConfirmModal(roleArray){
	
	/*打开模态框*/
	$("#confirmModal").modal("show");
	
	//千万别忘记要清楚一下上次打卡的旧数据，否则会一直叠加旧数据
	$("#roleNameDiv").empty();
	
	//在全局范围创建数组用来存放角色id
	window.roleIdArray=[];
	
	/*遍历roleArray数组*/
	for (var i = 0; i < roleArray.length; i++) {
		
		var role = roleArray[i];
		
		var roleName = role.roleName;
		
		$("#roleNameDiv").append(roleName+"<br/>")
		
		var rolrId=role.roleId;
		
		//调用数组对象的push()方法存入新元素
		window.roleIdArray.push(rolrId);
	}
	
}

























